package com.example.demo1101.demo3;

public class BankCard {
    private double balance;
    //表示有钱没钱  true 表示有钱  false表示没钱
    private boolean flag = false;

    //存钱方法  synchronized  我在方法上加synchronized  表示整个方法都上锁了 默认的锁对象就是this对象
    public synchronized void save(double money) {
        //表示卡里有钱--无需存钱
        if (flag == true) {

            try {
                //表示当前线程释放锁并进入等待队列
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance = balance + money;
        System.out.println(Thread.currentThread().getName() + "存入了" + money + "元，卡中余额：" + balance);
        flag = true;
        //唤醒等待队列中的线程
        notify();
    }

    //取钱方法
    public synchronized void token(double money) {
        if (flag == false) {

            try {
                //表示当前线程释放锁并进入等待队列
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        balance = balance - money;
        System.out.println(Thread.currentThread().getName() + "取了" + money + "元，卡中余额：" + balance);
        flag = false;
        notify();

    }


}
